Git是什麼?
Git是一種工具(可以譬喻為時光機)。
以履歷為例子,如果我們每次更新履歷,但是又要把每次的版本留下來,我們的作法就是複製一份履歷當作備份,再對新的履歷進行修改,這樣兩個版本的履歷就要有兩個檔案。
但我們的專案檔案大小很大,也非常快的一直在更新,我們不可能一直不斷的複製備份我們的專案,所以Git這個工具可以把專案維持在一份就好
,因為要做新的變動可以一直切分支出去,做好再合併回來,不斷創造節點(就像遊戲的記錄點),想要看哪個節點可以隨時跳回去看。
Github又是什麼?
Github是代碼托管的倉庫
現在其實有很多種的倉庫,但github是目前最熱門的,在這邊先簡單介紹Github最重要的Fork
、Clone
和PullRequest
是什麼東西。
Fork和Clone的迷思
Fork(叉子),就像是把東西(專案)叉進(複製)到自己的盤子(自己的Github)裡處理。
Clone是把Github上的專案複製下載到本地端,所有的更新紀錄也都會一並下載。
Github是一個可以開放code讓世界各地的人協作的地方,我們希望可以讓每個人不斷的把專案更新得更完整,畢竟每個人也許會有每個人的盲點或想不到的功能甚至Bug,所以Github是一個很強大的協作開發工具。
玩過Github的人都知道,其實別人的專案就算沒有Fork到自己的Giuhub裡也是可以Clone下來的,為什麼要多此一舉呢?
在哪裡Clone下來的專案,專案的地址就會指向那個專案位置
,也就是說今天沒有先Fork到自己的倉庫(Github)就Clone,在我們push的時候會遵照著地址push到別人的倉庫,但是你沒有別人倉庫的鑰匙是不能push上去的!
如何查看自己地址?git remote -v
當然我們也可以再下指令去更改地址到我們自己的倉庫,但是直接按一下Fork再Clone下來就好何必要這麼麻煩多此一舉呢?
Pull Request請求
Pull Request是發送請求給原作者說可不可以合併我新增的東西。
剛剛說Github是很強的協作工具,那你Fork加Clone專案下來並且更新好之後想要原作者合併(merge)上你的更新就必須發Pull Request請求給原作者
,原作者自己按接受後才算是完整的完成這次的合併(merge)囉!
Git flow(工作流程)
外面最正常的團隊開發流程:
1.master是穩定的prodution
2.develop是用來當作開發的分支
3.其他開發都是從develop切出去,最後再合併回來
單人的話:
1.master是穩定的prodution也可以用來當作開發的主要分支
2.其他開發都是從develop切出去,最後再合併回來
合併回master的隱藏好處是會不斷增加自己Github上的Commit數(小綠格),那它代表著下面幾個重點:
1.Github是實力展現的地方
2.預設的branch(master)才會被計算
3.繽紛的色彩看起來很厲害
後面老師有介紹小工具source tree (圖形化的Git工具),在網路上即可免費下載。
安裝後打開新增一個倉庫,把專案加進去,圖形化的介面可以把專案的更新紀錄和流程看得更清楚,裡面也可以有按鈕直接下一些指令(例如commit, push等等)。
最後Nic老師有示範一下的日常開發流程:
實作功能:Job-listing首頁加入使用者人數計算
先創造這次的分支要做什麼功能(這次功能為顯示使用者人數):git checkout -b users-count
切換到這個分支去,如果沒有的話就開啟新分支。
更新完這次的功能後做最後檢查:git status
看更動了哪些檔案。git diff
看檔案裡實際更動了什麼東西。
檢查完後開始下記錄點並更新專案:git add .
追蹤所有檔案。git commit -m "Add count"
下紀錄點。git checkout master
切回主幹Branch。git merge user-count
合併剛剛的分支。git push
推上去Github更新專案。
這裡有一個主宗是希望主幹永遠保持最乾淨
。
Q&A:
1.Boostrap的格線問題
不好回答,去看文件就有
2.初期抄別人代碼但不夠理解不能變自己的怎麼辦?
一開始不要理解到底,只要能掌握怎麼使用和效果就夠了。
像走路一樣不可能理解到左腳右腳重心放在哪才肯走路,一定是走路不斷跌倒才會學最快的。
3.Git checkout . 有新增檔案會不會也被回朔?
因為新增檔案沒被追蹤過所以不會被回朔,可以用git stash清掉。
4.我的branch切太多還要全部合併嗎?
主要開發一個就好了,其他砍掉吧!
5.table跟柵格系統不一樣在哪?自適應怎麼做?網上有很多做法但不到哪一個才是正確的?
用%數或Bootstrap上的套件就可以使用,table跟柵格系統其實蠻不一樣的可以多看文件,問題太籠統很難回答。
6.我已經切八個分支了怎麼辦?只要合併最新的嗎?
沒錯,專心開發最新最完整的一個分支就好,其他都刪了吧!
7.index和show有什麼不一樣?
index像是農場內的一群羊,show是抓一隻羊出來看。
小結論:
這個基本的工作流程和版本控管真的很重要,但是他雖然很簡單,會遇到的狀況卻是非常多,所以真的還是得上了戰場錯了幾次才會真正體會到Git和Github的精髓啊!